#pragma once

#include <vector>
#include "Includes.h"
#include "Engine/RenderGlobals.h"

struct TVertexDeclElement
{
    std::string        sSemanticName;
    mUInt              uSemanticIndex;
    TVariableType      VarType;
    mUInt              uInputSlot;
};

class CVertexDeclaration
{
protected:
    std::vector< TVertexDeclElement > m_Declaration;

    CVertexDeclaration                                 ( );

public:
    virtual ~CVertexDeclaration                        ( );
    static CVertexDeclaration *CreateVertexDeclaration ( );
    mVoid                      AddElement              ( std::string a_sSemanticName, mUInt a_uSemanticIndex, TVariableType a_VarType, mUInt a_uInputSlot );
    virtual mBool              Create                  ( const void *a_pShaderByteCode, size_t a_uByteCodeLength ) = 0;
    virtual mVoid              Setup                   ( ) = 0;
};